package com.gimi.cloud.bbp.manage.service.sys.impl;

import com.gimi.cloud.bbp.common.constant.RedisKeyConstant;
import com.gimi.cloud.bbp.common.enums.ResponseCodeEnum;
import com.gimi.cloud.bbp.common.exception.MsgException;
import com.gimi.cloud.bbp.common.utils.MyBeanUtils;
import com.gimi.cloud.bbp.common.utils.StringUtil;
import com.gimi.cloud.bbp.commonService.redis.RedisService;
import com.gimi.cloud.bbp.dao.dao.sys.SysConfigDao;
import com.gimi.cloud.bbp.dto.sys.SysConfigDTO;
import com.gimi.cloud.bbp.entity.sys.SysConfigEntity;
import com.gimi.cloud.bbp.manage.service.sys.ConfigService;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;
@Service
public class ConfigServiceImpl implements ConfigService {
	@Autowired
	private SysConfigDao sysConfigDao;
	@Autowired
	private RedisService redisService;

	/**
	 * 按照cf_name 或者 cf_key列来查询配置列表
	 * @param configDTO
	 * @return
	 */
	@Override
	public List<SysConfigDTO> getConfigList(SysConfigDTO configDTO) {
		return null;
	}
	/**
	 * 添加
	 * @param configDTO
	 */
	@Override
	public void addConfig(SysConfigDTO configDTO) {
		SysConfigEntity record = new SysConfigEntity();
		BeanUtils.copyProperties(configDTO,record);           
		sysConfigDao.insert(record);
	}
	/**
	 * 根据id查询单一实体
	 */
	@Override
	public SysConfigDTO getConfigSingle(SysConfigDTO configDTO) {
		SysConfigEntity configEntity = sysConfigDao.selectByPrimaryKey(configDTO.getCfId());
		BeanUtils.copyProperties(configEntity, configDTO);
		return configDTO;
	}
	/**
	 * 修改
	 */
	@Override
	public void configUpdate(SysConfigDTO configDTO) {
		SysConfigEntity entity = sysConfigDao.selectByPrimaryKey(configDTO.getCfId());
		if (entity != null) {
			if (configDTO.getCfKey() != null && configDTO.getCfKey() != entity.getCfKey()) {
				throw new MsgException(ResponseCodeEnum.FAILURE, "配置信息Key不允许修改 !");
			}
			MyBeanUtils.copyPropertiesIgnoreNull(configDTO, entity);
			int i = sysConfigDao.updateByPrimaryKey(entity);
			if (i<= 0) {
				throw new MsgException(ResponseCodeEnum.FAILURE, "更新失败!");
			}else {
				redisService.set(RedisKeyConstant.BBP_CONFIG_PREFIX + entity.getCfKey(), entity.getCfValue());
			}
		}else {
			throw new MsgException(ResponseCodeEnum.FAILURE, "该配置信息不存在 !");
		}
	}
	/**
	 * 删除
	 */
	@Override
	public void configDelete(SysConfigDTO configDTO) {
		//sysConfigDao.deleteByPrimaryKey(configDTO.getCfId());
		configDTO.setIsDelete(1);
		SysConfigEntity record = new SysConfigEntity();
		BeanUtils.copyProperties(configDTO, record);
		sysConfigDao.updateByPrimaryKey(record);
	}
	@Override
	public PageInfo<SysConfigEntity> getConfigPageList(SysConfigDTO configDTO) {
		PageHelper.startPage(configDTO.getCurrentPage(), configDTO.getPageSize());

		StringBuffer buffer = new StringBuffer();
		buffer.append("SELECT * FROM sys_config where is_delete = 0 ");
		if (!StringUtil.isEmpty(configDTO.getCfName())) {
			buffer.append(" AND ( cf_name like '%" + configDTO.getCfName() + "%'");
			buffer.append(" or cf_key like '%" + configDTO.getCfName() + "%' )");
		}
		
		//查询所有
		List<SysConfigEntity> selectAll = sysConfigDao.findBypageList(buffer.toString());
	    PageInfo<SysConfigEntity> page = new PageInfo<>(selectAll);
		return page;
	}

}
